home *** CD-ROM | disk | FTP | other *** search
/ Video Toaster 4.0 / Video Toaster v4.0.iso / arexx / modeler / spherize.lwm < prev    next >
Text File  |  1993-12-13  |  1KB  |  70 lines

  1. /* CMD: Spherize
  2.  * Spherize data points -- Modeler ARexx transform.
  3.  */
  4. /* Sun Jan 31 21:10:22 1993 */
  5.  
  6. address "LWModelerARexx.port"
  7. libadd = addlib("LWModelerARexx.port",0)
  8. signal on error
  9. signal on syntax
  10. MATHLIB="rexxmathlib.library"
  11. IF POS(MATHLIB , SHOW('L')) = 0 THEN
  12.   IF ~ADDLIB(MATHLIB , 0 , -30 , 0) THEN DO
  13.     call notify(1,"!Can't find "MATHLIB)
  14.     exit
  15.     END
  16.  
  17. /* -- Main code body -- */
  18.  
  19.  
  20. /* Get center and radius of inflation.
  21.  */
  22. call req_begin "Spherize"
  23.  
  24. id_rad = req_addcontrol("Radius", 'n', 1)
  25. id_cen = req_addcontrol("Center", 'v', 1)
  26. call req_setval id_rad, 1.0, 1.0
  27.  
  28. if (~req_post()) then exit
  29.  
  30. rad = req_getval(id_rad)
  31. parse value req_getval(id_cen) with cx cy cz .
  32.  
  33. call req_end
  34.  
  35.  
  36. /* Transform loop
  37.  */
  38. n = xfrm_begin()
  39. call meter_begin n, "Spherize"
  40. do i = 1 to n
  41.     parse value xfrm_getpos(i) with x y z .
  42.     dx = x - cx
  43.     dy = y - cy
  44.     dz = z - cz
  45.     d = sqrt(dx * dx + dy * dy + dz * dz)
  46.     if (d ~= 0) then do
  47.     d = rad / d
  48.     x = cx + dx * d
  49.     y = cy + dy * d
  50.     z = cz + dz * d
  51.     call xfrm_setpos i, x y z
  52.     end
  53.     call meter_step
  54. end
  55. call meter_end
  56. call xfrm_end
  57.  
  58.  
  59. /* -- End Main code -- */
  60.  
  61. if (libadd) then call remlib("LWModelerARexx.port")
  62. exit
  63.  
  64. syntax:
  65. error:
  66.   call end_all
  67.     t=Notify(1,'!Rexx Script Error','@'ErrorText(rc),'Line 'SIGL)
  68.   if (libadd) then call remlib("LWModelerARexx.port")
  69.     exit
  70.